package com.ruoyi.common.enums;

import com.ruoyi.paramters.domain.Parameter;

import java.util.Arrays;
import java.util.function.Function;

public enum OrderNumberTypeEnum {

    // 采购订单 和 销售订单
    PURCHASEORDER("0", Parameter::getSalePre),
    // 采购入库
    PROCUREMENTORDER("1", Parameter::getPurPre),
    // 采购退货
    PURCHASERETURNORDER("2", Parameter::getStockPre),
    // 销售订单 和采购订单用的是同一个
    // SALEORDER("3", Parameter::getSalePre),
    // 销货单
    SALEGOODSORDER("3", Parameter::getOutPre),
    // 销售发票
    SALEINVOICE("4", Parameter::getInvoicePre);

    // Key
    private final String code;
    // 获取Value函数
    private final Function<Parameter, String> getter;

    /**
     * 枚举的私有构造
     * @param code Key
     * @param getter 获取Value函数
     */
    OrderNumberTypeEnum(String code, Function<Parameter, String> getter) {
        this.code = code;
        this.getter = getter;
    }

    /**
     * 获取值
     * @param parameter 前缀对象
     * @return 结果
     */
    public String getPrefix(Parameter parameter) {
        return getter.apply(parameter);
    }

    /**
     * 根据 code 获取 value
     * @param code Key
     * @return 结果
     */
    public static OrderNumberTypeEnum fromCode(String code) {
        return Arrays.stream(values())
                .filter(e -> e.code.equals(code))
                .findFirst()
                .orElseThrow(() -> new RuntimeException("类型错误"));
    }


}
